package com.nc.mem.tests.custom.map;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Map;

public class AbstractMapSource {

	Map<?, ?>[] getAllCaches() {
		// return toArray(transform(filter(Arrays.asList(getClass().getDeclaredFields()), new
		// Predicate<Field>() {
		//
		// @Override
		// public boolean apply(final Field input) {
		// return Map.class.isAssignableFrom(input.getType());
		// }
		// }), new Function<Field, Map<?, ?>>() {
		//
		// @Override
		// public Map<?, ?> apply(final Field input) {
		// try {
		// input.setAccessible(true);
		// return (Map<?, ?>) input.get(AbstractMapSource.this);
		// } catch (final Exception e) {
		// throw new RuntimeException(e);
		// }
		// }
		// }), Map.class);

		final Field[] fields = getClass().getDeclaredFields();

		final ArrayList<Map<?, ?>> list = new ArrayList<Map<?, ?>>();

		for (final Field f : fields) {
			if (Map.class.isAssignableFrom(f.getType())) {
				f.setAccessible(true);
				try {
					list.add((Map<?, ?>) f.get(AbstractMapSource.this));
				} catch (final Exception e) {
					throw new RuntimeException(e);
				}
			}
		}

		return list.toArray(new Map<?, ?>[list.size()]);
	}

}
